/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package infoserver;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

/**
 *
 * @author Erik
 */
public class GUI extends JFrame implements ActionListener{
    
    //Variabelen van de tabs
    private JTabbedPane tabbedPane;
    private JPanel tabStatus;
    private JPanel tabSettings;
    private JPanel tabLog;
    private JPanel tabHelp;
    
    //Aanmaken van de variabelen die in de tabs gebruikt worden
    
    //Status tab
    private JTextArea areaRun = new JTextArea(1,1); //Het grote tekstveld waar de huidige activiteiten op worden weergeven
    private JTextField fieldCmd = new JTextField(10); //Het command input tekstveld
    private JButton buttonStart = new JButton("Start"); //De button om de server mee te starten
    private JButton buttonStop = new JButton("Stop"); //De button om de server mee te stoppen
    private JButton buttonRestart = new JButton("Restart"); //De button om de server mee te restarten
    
    //Settings tab
    private JTextField fieldIp = new JTextField(1); //Het tekstveld waarin het Ip address in kan worden aangepast
    private JTextField fieldPort = new JTextField(1); //Het tekstveld waarin het Port nummer kan worden aangepast
    private JTextField fieldDbname = new JTextField(1); //Het tekstveld waarin de naam van de database kan worden aangepast
    private JTextField fieldUser = new JTextField(1); //Het tekstveld waarin de username kan worden aangepast
    private JPasswordField fieldPass = new JPasswordField(1); //Het tekstveld waarin het password kan worden aangepast
    private JTextField fieldLocation = new JTextField(1); //Het tekstveld waarin de locatie van de log bestanden wordt weergeven
    private JButton buttonBrowse = new JButton("Browse"); //De knop om te zoeken naar de locatiemap waarin de log bestanden zitten
    private JButton buttonSave = new JButton("Save"); //De knop om de wijzigingen op te slaan
    
    //Log tab
    private DefaultListModel listItem = new DefaultListModel(); //Dit is het model en de vormgeving van de list
    private JButton buttonOpen = new JButton("Open"); //Knop om het geselecteerde bestand mee te openen
    private JButton buttonDelete = new JButton("Delete"); //Knop om het geselecteerde bestand mee te verwijderen
    
    //Help tab
    private JTextArea fieldHelp = new JTextArea(1,1); //Het veld waarin de hulptekst wordt weergeven
    
    //Constructor
    public GUI(){
         
        //Standaard schermgegevens aanmaken
        setTitle("Infoserver");
        setSize(480, 480);
        setBackground(Color.WHITE);
        setResizable(false);
        
        //Dit zorgt ervoor dat de juiste Tab (de tab waarop geklikt is) wordt weergeven
        JPanel topPanel = new JPanel();
        topPanel.setLayout(new BorderLayout());
        getContentPane().add(topPanel);
        
        //Het aanroepen van de functies die de tabs aanmaken (in deze functies is het "subscherm" opgebouwd
       createTabStatus();
       createTabSettings();
       createTabLog();
       createTabHelp();
       
       //De tabbladbar aanmaken
       tabbedPane = new JTabbedPane();
       tabbedPane.addTab("Status", tabStatus);
       tabbedPane.addTab("Settings", tabSettings);
       tabbedPane.addTab("Log", tabLog);
       tabbedPane.addTab("Help", tabHelp);
       topPanel.add(tabbedPane, BorderLayout.CENTER);
       
       //Toevoegen van actionlisteners
       buttonOpen.addActionListener(this);
       
    }
    
    //Deze functie maakt het tab aan waarin de status van de server wordt weergeven
    public void createTabStatus(){
        //Eerst wordt een nieuw Jpanel aangemaakt, deze is zonder layout, alles wordt dus met coordinaten geplaatst
        tabStatus = new JPanel();
        tabStatus.setLayout(null);
        
        //Het stukje tekst waar het Ip Address wordt weergeven, HET IP ADDRESS MOET VERVANGEN WORDEN DOOR EEN GETTER
        JLabel labelIP = new JLabel("Ip Address: 127.127.127.127");
        labelIP.setBounds(10,15,160,20);
        tabStatus.add(labelIP);
        
        //Het stukje tekst waar het port nummer wordt weergeven, HET PORT NUMMER MOET VERVANGEN WORDEN DOOR EEN GETTER
        JLabel labelPort = new JLabel("Port: 808000");
        labelPort.setBounds(175, 15, 80, 20);
        tabStatus.add(labelPort);
        
        //Het stukje tekst waar het aantal connecties wordt weergeven, HET NUMMER MOET VRVANGEN WORDEN DOOR EEN GETTER
        JLabel labelConnections = new JLabel("Connections: 120");
        labelConnections.setBounds(300, 15, 150, 20);
        tabStatus.add(labelConnections);
        
        //Het stukje tekst waar de status van de server wordt weergeven, DE STATUS MOET VERVANGEN WORDEN DOOR EEN GETTER
        JLabel labelStatus = new JLabel("Status: Offline");
        labelStatus.setBounds(10, 40, 150, 20);
        tabStatus.add(labelStatus);
        
        //Hier wordt de textarea aangemaakt, dit is voor de properties
        areaRun.setLineWrap(true);
        areaRun.setWrapStyleWord(true);
        areaRun.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); //border wordt aangemaakt voor de scrollbar
        
        //Hier wordt de scrollbar aangemaakt, het textfield wordt aan de scrollbar toegevoegd en daarna wordt deze aangemaakt
        JScrollPane scrollBar = new JScrollPane(areaRun);
        scrollBar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollBar.setBounds(10, 65, 450, 300);
        tabStatus.add(scrollBar);
        
        //Het veld waarin een command getypt kan worden wordt hier toegevoegd
        fieldCmd.setBounds(10, 370, 150, 20);
        fieldCmd.setText("Command input");
        tabStatus.add(fieldCmd);
        
        //De button om de server te starten wordt hier toegevoegd
        buttonStart.setBounds(180, 370, 75, 30);
        tabStatus.add(buttonStart);
        
        //De button om de server te stoppen wordt hier toegevoegd
        buttonStop.setBounds(260, 370, 75, 30);
        tabStatus.add(buttonStop);
        
        //De button om de server te restarten wordt hier toegevoegd
        buttonRestart.setBounds(340, 370, 85, 30);
        tabStatus.add(buttonRestart);
        
    }
    
    //Deze functie maakt het tab aan waarin de settings van de server worden weergeven
    public void createTabSettings(){
        //Eerst wordt een nieuw Jpanel aangemaakt, deze is zonder layout, alles wordt dus met coordinaten geplaatst
        tabSettings = new JPanel();
        tabSettings.setLayout(null);
        
        JLabel labelDbserver = new JLabel("Database server:");
        labelDbserver.setBounds(10,15,150,20);
        tabSettings.add(labelDbserver);
        
        JLabel labelIp = new JLabel ("Ip Address");
        labelIp.setBounds(10, 40, 100, 20);
        tabSettings.add(labelIp);
        
        //Hier wordt het veld toegevoegd waar het Ip address kan worden veranderd, huidige IP address wordt ook weergeven
        fieldIp.setBounds(120, 40, 100, 20);
        fieldIp.setText("127.127.127.127");
        tabSettings.add(fieldIp);
        
        JLabel labelPort = new JLabel("Port");
        labelPort.setBounds(10, 65, 100, 20);
        tabSettings.add(labelPort);
        
        //Hier wordt het veld toegevoegd waar het port nummer kan worden veranderd, huidige port nummer wordt ook weergeven
        fieldPort.setBounds(120, 65, 60, 20);
        fieldPort.setText("808000");
        tabSettings.add(fieldPort);
        
        JLabel labelDbname = new JLabel("Database name");
        labelDbname.setBounds(10, 90, 100, 20);
        tabSettings.add(labelDbname);
        
        //Hier wordt het veld toegevoegd waar de databse naam kan worden veranderd, huidige database naam wordt ook weergeven
        fieldDbname.setBounds(120, 90, 120, 20);
        fieldDbname.setText("Test Database");
        tabSettings.add(fieldDbname);
        
        JLabel labelUser = new JLabel("Username");
        labelUser.setBounds(10, 115, 100, 20);
        tabSettings.add(labelUser);
        
        //Hier wordt het veld toegevoegd waar de username kan worden veranderd, huidige username wordt ook weergeven
        fieldUser.setBounds(120, 115, 120, 20);
        fieldUser.setText("Jan");
        tabSettings.add(fieldUser);
        
        JLabel labelPass = new JLabel("Password");
        labelPass.setBounds(10, 140, 100, 20);
        tabSettings.add(labelPass);
        
        //Hier wordt het veld toegevoegd waar het wachtwoord kan worden veranderd, huidige wachtwoord wordt ook weergeven in bolletjes
        fieldPass.setBounds(120, 140, 100, 20);
        fieldPass.setText("wachtwoord");
        tabSettings.add(fieldPass);
        
        JLabel labelLocation = new JLabel("Log location:");
        labelLocation.setBounds(10, 200, 200, 20);
        tabSettings.add(labelLocation);
        
        //Hier wordt het veld toegevoegd waar de locatie van de log bestanden kan worden veranderd, huidige locatie wordt ook weergeven
        fieldLocation.setBounds(10, 225, 300, 20);
        fieldLocation.setText("C://Server files/logs/");
        tabSettings.add(fieldLocation);
        
        //Hier wordt de button toegevoegd waarmee door maps heen gebrowsed kan worden om een locatie voor de log bestanden te kiezen
        buttonBrowse.setBounds(315, 225, 80, 20);
        tabSettings.add(buttonBrowse);
        
        //Hier wordt de button toegevoegd om de aangepaste settings op te slaan
        buttonSave.setBounds(380, 400, 70, 20);
        tabSettings.add(buttonSave);
        
        
    }
    
    //Deze functie maakt het tab aan waarin log bestanden kunnen worden geopend en worden bekeken
    public void createTabLog(){
        //Eerst wordt een nieuw Jpanel aangemaakt, deze is zonder layout, alles wordt dus met coordinaten geplaatst
        tabLog = new JPanel();
        tabLog.setLayout(null);
        
        //Hier worden alle items van de list toegevoegd
        listItem.addElement("Log: 24/04/2012, 00:00 - 12:00");
        listItem.addElement("Log: 24/04/2012, 12:00 - 24:00");
        listItem.addElement("Log: 25/04/2012, 00:00 - 12:00");
        listItem.addElement("Log: 25/04/2012, 12:00 - 24:00");
        listItem.addElement("Log: 26/04/2012, 00:00 - 12:00");
        listItem.addElement("Log: 26/04/2012, 12:00 - 24:00");
        
        //Hier wordt de lijst aangemaakt
        JList list = new JList(listItem);
        list.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); //border wordt aangemaakt voor de scrollbar
        
        //De lijst wordt toegevoegd aan de scrollbar en de scrollbar wordt toegevoegd aan het tabblad
        JScrollPane scrollBar = new JScrollPane(list);
        scrollBar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollBar.setBounds(10, 15, 300, 400);
        tabLog.add(scrollBar);
        
        //Hier wordt de button om bestanden mee te openen toegevoegd
        buttonOpen.setBounds(330, 170, 80, 30 );
        tabLog.add(buttonOpen);
        
        //Hier wordt de button om bestanden mee te verwijderen toegevoegd
        buttonDelete.setBounds(330, 210, 80, 30);
        tabLog.add(buttonDelete);
    }
    
    //Deze functie maakt het tab aan waarin de hulp tekst wordt weergeven
    public void createTabHelp(){
        //Eerst wordt een nieuw Jpanel aangemaakt, deze is zonder layout, alles wordt dus met coordinaten geplaatst
        tabHelp = new JPanel();
        tabHelp.setLayout(null);
        
        //Hier wordt de textarea aangemaakt, dit is voor de properties
        fieldHelp.setEditable(false);
        fieldHelp.setText("Hier komt de help tekst te staan, deze tekst wordt automatisch afgebroken en de scrollbar functioneert ook automatisch");
        fieldHelp.setLineWrap(true);
        fieldHelp.setWrapStyleWord(true);
        fieldHelp.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); //border wordt aangemaakt voor de scrollbar
        
        //Hier wordt de scrollbar aangemaakt, het textfield wordt aan de scrollbar toegevoegd en daarna wordt deze aangemaakt
        JScrollPane scrollBar = new JScrollPane(fieldHelp);
        scrollBar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollBar.setBounds(10, 15, 450, 400);
        tabHelp.add(scrollBar);
        
    }
    
    //Dit is gewoon even snel om de functionaliteit te laten zien
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == buttonOpen){
            LogDialog logDialog = new LogDialog(this);
            logDialog.setVisible(true);
        }
    }
        
}
    
 
